#include "GLFont2D.h"

using namespace game_engine::open_gl;
using namespace game_engine::utils;

///////////////////////////////////////////////////////////////////////////////
// Constructors and Destructors
///////////////////////////////////////////////////////////////////////////////

GLFont2D::GLFont2D(void)
    : font(HELVETICA_10), color()
{
}

GLFont2D::GLFont2D(const FontType &f, const ColorRGB &c)
    : font(f), color(c)
{
}

GLFont2D::~GLFont2D(void)
{
}

///////////////////////////////////////////////////////////////////////////////
// Other public methods
///////////////////////////////////////////////////////////////////////////////

void GLFont2D::drawString(const Point &pos, const string &msg)
{
    glColor3f(color.getRed() / 255.0f, 
        color.getGreen() / 255.0f, 
        color.getBlue() / 255.0f);
	glRasterPos2f(pos.getX(), pos.getY());
	
	for(INT32 i=0, len=msg.length(); i<len; i++)
    {
        switch(font)
        {
        case TIMES_ROMAN_10:
            glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_10, msg[i]);
            break;
        case TIMES_ROMAN_24:
            glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24, msg[i]);
            break;
        case HELVETICA_10:
            glutBitmapCharacter(GLUT_BITMAP_HELVETICA_10, msg[i]);
            break;
        case HELVETICA_12:
            glutBitmapCharacter(GLUT_BITMAP_HELVETICA_12, msg[i]);
            break;
        case HELVETICA_18:
            glutBitmapCharacter(GLUT_BITMAP_HELVETICA_18, msg[i]);
            break;
        default:
            glutBitmapCharacter(GLUT_BITMAP_HELVETICA_10, msg[i]);
            break;
        }
	}
}

///////////////////////////////////////////////////////////////////////////////
// Getters
///////////////////////////////////////////////////////////////////////////////

const FontType& GLFont2D::getFont(void) const
{
    return font;
}

const ColorRGB& GLFont2D::getColor(void) const
{
    return color;
}

///////////////////////////////////////////////////////////////////////////////
// Setters
///////////////////////////////////////////////////////////////////////////////

void GLFont2D::setFont(const FontType &f)
{
    font = f;
}

void GLFont2D::setColor(const ColorRGB &c)
{
    color = c;
}
